/*
 * 根据配置文件生成 mybatis xml 文件
 *
 * VERSION  DATE        BY              REASON
 * -------- ----------- --------------- ------------------------------------------
 * 1.00     2014.07.24  wuxiaogang      程序・发布
 * -------- ----------- --------------- ------------------------------------------
 * Copyright 2014 easycode System. - All Rights Reserved.
 *
 */
package cn.com.softvan.easycode.utils;

import java.io.File;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

import cn.com.softvan.common.IOHelper;
import cn.com.softvan.common.StrUtils;
import cn.com.softvan.common.Validator;
import cn.com.softvan.easycode.bean.ColumsBean;
import cn.com.softvan.easycode.bean.ConfigBean;
import cn.com.softvan.easycode.bean.TableBean;
/**
 * 根据配置文件生成 mybatis xml 文件
 * @author wuxiaogang 
 *
 */
public class MybatisUtils {
	/**
	 * 生成 mybatis xml
	 * @param config
	 * @return
	 */
	public static StringBuffer toFile(ConfigBean config){
		StringBuffer csb=new StringBuffer("");
		try {
			if(null==config){
				return csb;
			}
			//TODO 获取表列表
			List<TableBean> tables=config.getTables();
			if(null==tables){
				return csb;
			}
			for(TableBean table:tables){
				try {
					//原始 类名
					String className="";
					//dao接口类 名称
					String daoClassName="";
					//bean类 名称
					String beanClassName="";
					//entity类 名称
					String entityClassName="";
					//是否生成mybatis xml 0否 1是
					String isMybatisXml=config.getIsMybatisXml();
					if(Validator.notEmpty(table.getIsMybatisXml())){
						isMybatisXml=table.getIsMybatisXml();
					}
					
					//TODO 逻辑删除字段存在标记
					String del_flag=null;
					//TODO 数据创建时间
					String date_created_falg=null;
					
					//--主键字段列表--
					List<ColumsBean> pkColumsBeans=new ArrayList<ColumsBean>();
					//TODO----dao bean entity 名称
					if(Validator.isEmpty(table.getClassName())){
						className=StrUtils.toUpperCase(StrUtils.getRidprefixTableName(config.getRidprefixlen(),table.getTableName()),"_");
						daoClassName="I"+StrUtils.toUpperCase(StrUtils.getRidprefixTableName(config.getRidprefixlen(),table.getTableName()),"_")+"Dao";
						beanClassName=StrUtils.toLowerCaseFirstOne(StrUtils.toUpperCase(StrUtils.getRidprefixTableName(config.getRidprefixlen(),table.getTableName()),"_")+"Bean");
						entityClassName=StrUtils.toLowerCaseFirstOne(StrUtils.toUpperCase(StrUtils.getRidprefixTableName(config.getRidprefixlen(),table.getTableName()),"_"));
					}else{
						className=table.getClassName();
						daoClassName="I"+table.getClassName()+"Dao";
						beanClassName=StrUtils.toLowerCaseFirstOne(table.getClassName()+"Bean");
						entityClassName=StrUtils.toLowerCaseFirstOne(table.getClassName());
					}
					if("0".equals(isMybatisXml)){
//						//TODO 生成配置文件信息
//						csb.append("\n\t\t<!-- "+table.getTableNote()+" -->");
//						csb.append("\n\t\t<mapper resource=\"/"+config.getXmlPackage().replace(".", "/")+"/"+className+".xml\"/>");
						
						continue;
					}
					//存放内容
					StringBuffer sb=new StringBuffer("");
					//TODO ---1-----xml 文件头信息
					sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>");
					sb.append("\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\" >");
					sb.append("\n<mapper namespace=\""+config.getDaointerPackage()+"."+daoClassName+"\" >");
					//TODO 获取表字段列表
					List<ColumsBean> columsBeans=table.getColums();
					if(columsBeans==null){
						columsBeans=new ArrayList<ColumsBean>();
					}
					//-----1-字段列表------
					sb.append("\n\t<!-- 字段列表 -->");
					sb.append("\n\t<sql id=\"Base_Column_List\" >");
					
					for(int i=0;i<columsBeans.size();i++){
						ColumsBean colums=columsBeans.get(i);
						//是否存在数据创建时间
						if("date_created".equals(StrUtils.toLowerCase((colums.getColumsName())))){
							date_created_falg="存在";
						}
						
						if(Validator.notEmpty(config.getDelColumns()) && config.getDelColumns().equals(StrUtils.toLowerCase((colums.getColumsName())))){
							del_flag="存在";
						}
						
						//是否主键
						if("PRI".equals(StrUtils.toUpperCase(colums.getColumsKey()))){
							pkColumsBeans.add(colums);
						}
						sb.append("\n\t\tt1."+colums.getColumsName() +" as \""+HeaderUtils.getStr(config.getIsformat(),colums.getColumsName())+"\"");
						//不是最后一个
						if(i<columsBeans.size()-1){
							sb.append(",");
						}
					}
					sb.append("\n\t</sql>");
					//----2-根据主键获取信息详情----
					sb.append("\n\t<!-- 根据主键获取信息详情 -->");
					sb.append("\n\t<select id=\"selectByPrimaryKey\" resultType=\""+beanClassName+"\" parameterType=\""+entityClassName+"\" >");
					sb.append("\n\t\tselect");
					sb.append("\n\t\t<include refid=\"Base_Column_List\" />");
					sb.append("\n\t\tfrom "+table.getTableName()+" t1 ");
					sb.append("\n\t\twhere ");
					for(int i=0;i<pkColumsBeans.size();i++){
						ColumsBean colums=pkColumsBeans.get(i);
						sb.append(" t1."+colums.getColumsName()+" = #{"+HeaderUtils.getStr(config.getIsformat(),colums.getColumsName())+"}");
						if(i<pkColumsBeans.size()-1){
							sb.append(" and ");
						}
					}
					sb.append("\n\t</select>");
					
					//----2-根据主键物理删除信息----
					sb.append("\n\t<!-- 根据主键物理删除信息 -->");
					sb.append("\n\t<delete id=\"deleteByPrimaryKey\" parameterType=\""+entityClassName+"\" >");
					sb.append("\n\t\tdelete");
					sb.append("\n\t\tfrom "+table.getTableName());
					sb.append("\n\t\twhere ");
					for(int i=0;i<pkColumsBeans.size();i++){
						ColumsBean colums=pkColumsBeans.get(i);
						sb.append(" "+colums.getColumsName()+" = #{"+HeaderUtils.getStr(config.getIsformat(),colums.getColumsName())+"}");
						if(i<pkColumsBeans.size()-1){
							sb.append(" and ");
						}
					}
					sb.append("\n\t</delete>");
					
					//---3--新增单条数据----
					sb.append("\n\t<!-- 新增单条数据 -->");
					sb.append("\n\t<insert id=\"insert\" parameterType=\""+entityClassName+"\" >");
					sb.append("\n\t\tinsert into "+table.getTableName()+"(");
					for(int i=0;i<columsBeans.size();i++){
						ColumsBean colums=columsBeans.get(i);
						
						//是不需要新增的字段
						if(config.getDbInsertNot()!=null && config.getDbInsertNot().keySet().contains(StrUtils.toLowerCase(colums.getColumsName()))){
							continue;
						}
						sb.append("\n\t\t"+colums.getColumsName());
						//不是最后一个
						if(i<columsBeans.size()-1){
							sb.append(",");
						}
					}
					sb.append("\n\t) values (");
					for(int i=0;i<columsBeans.size();i++){
						ColumsBean colums=columsBeans.get(i);
						//是不需要新增的字段
						if(config.getDbInsertNot()!=null && config.getDbInsertNot().keySet().contains(StrUtils.toLowerCase(colums.getColumsName()))){
							continue;
						}
						//特殊字段 特殊处理
						if(config.getDbInsertDefault()!=null && config.getDbInsertDefault().get(StrUtils.toLowerCase(colums.getColumsName()))!=null){
							sb.append("\n\t\t"+config.getDbInsertDefault().get(StrUtils.toLowerCase(colums.getColumsName()))+"");
						}else{
							sb.append("\n\t\t#{"+HeaderUtils.getStr(config.getIsformat(),colums.getColumsName())+"}");
						}
						//不是最后一个
						if(i<columsBeans.size()-1){
							sb.append(",");
						}
					}
					sb.append("\n\t)");
					StringBuffer saveOrUpdateStr=new StringBuffer();
					//or update 
					saveOrUpdateStr.append("\n\t ON DUPLICATE KEY UPDATE ");
					int y=0;
					for(int i=0;i<columsBeans.size();i++){
						ColumsBean colums=columsBeans.get(i);
						//默认更新字段
						if(config.getDbUpdateDefault()!=null){
							if(config.getDbUpdateDefault().keySet().contains(StrUtils.toLowerCase(colums.getColumsName()))){
								if(y==0){
									saveOrUpdateStr.append("\n\t\t");
								}else{
									saveOrUpdateStr.append("\n\t\t,");
								}
								if(Validator.notEmpty(config.getDbUpdateDefault().get(StrUtils.toLowerCase(colums.getColumsName())))){
									saveOrUpdateStr.append(StrUtils.toLowerCase(colums.getColumsName())+"="+config.getDbUpdateDefault().get(StrUtils.toLowerCase(colums.getColumsName()))+"");
								}else{
									saveOrUpdateStr.append(StrUtils.toLowerCase(colums.getColumsName())+"=VALUES("+StrUtils.toLowerCase(colums.getColumsName())+")");
								}
								y++;
								continue;
							}
						}
						//是备注字段
						if("memo".equals(StrUtils.toLowerCase(colums.getColumsName()))){
							if(y==0){
								saveOrUpdateStr.append("\n\t\t");
							}else{
								saveOrUpdateStr.append("\n\t\t,");
							}
							saveOrUpdateStr.append(StrUtils.toLowerCase(colums.getColumsName())+"=VALUES("+StrUtils.toLowerCase(colums.getColumsName())+")");
							y++;
							continue;
						}
						//必填字段
						if("1".equals(colums.getColumsIsNull())){
							//是主键
							if("PRI".equals(StrUtils.toUpperCase(colums.getColumsKey()))){
								continue;
							}
							//是备注字段
							if("memo".equals(StrUtils.toLowerCase(colums.getColumsName()))){
								continue;
							}
							//是上面已出现的字段
							if(config.getDbUpdateDefault()!=null && config.getDbUpdateDefault().keySet().contains(StrUtils.toLowerCase(colums.getColumsName()))){
								continue;
							}
							//是不需要更新的字段
							if(config.getDbUpdateNot()!=null && config.getDbUpdateNot().keySet().contains(StrUtils.toLowerCase(colums.getColumsName()))){
								continue;
							}
							if(y==0){
								saveOrUpdateStr.append("\n\t\t");
							}else{
								saveOrUpdateStr.append("\n\t\t,");
							}
							saveOrUpdateStr.append(StrUtils.toLowerCase(colums.getColumsName())+"=VALUES("+StrUtils.toLowerCase(colums.getColumsName())+")");
							y++;
						}
					}
					for(int i=0;i<columsBeans.size();i++){
						ColumsBean colums=columsBeans.get(i);
						//默认更新字段
						if(config.getDbUpdateDefault()!=null){
							if(config.getDbUpdateDefault().keySet().contains(StrUtils.toLowerCase(colums.getColumsName()))){
								continue;
							}
						}
						//是主键
						if("PRI".equals(StrUtils.toUpperCase(colums.getColumsKey()))){
							continue;
						}
						//是上面已出现的字段
						if(config.getDbUpdateDefault()!=null && config.getDbUpdateDefault().keySet().contains(StrUtils.toLowerCase(colums.getColumsName()))){
							continue;
						}
						//是不需要更新的字段
						if(config.getDbUpdateNot()!=null && config.getDbUpdateNot().keySet().contains(StrUtils.toLowerCase(colums.getColumsName()))){
							continue;
						}
						//是备注字段
						if("memo".equals(StrUtils.toLowerCase(colums.getColumsName()))){
							continue;
						}
						saveOrUpdateStr.append("\n\t\t<if test=\""+HeaderUtils.getStr(config.getIsformat(),colums.getColumsName())+"!= null\" >,"
						+colums.getColumsName()+"=VALUES("+StrUtils.toLowerCase(colums.getColumsName())+")" +
								"</if>");
					}
					sb.append(saveOrUpdateStr);
					sb.append("\n\t</insert>");
					
					//---3----新增 批量数据
					sb.append("\n\t<!-- 新增 批量数据 -->");
					sb.append("\n\t<insert id=\"insertBatch\">");
					sb.append("\n\t\tinsert into "+table.getTableName()+"(");
					for(int i=0;i<columsBeans.size();i++){
						ColumsBean colums=columsBeans.get(i);
						//是不需要新增的字段
						if(config.getDbInsertNot()!=null && config.getDbInsertNot().keySet().contains(StrUtils.toLowerCase(colums.getColumsName()))){
							continue;
						}
						sb.append("\n\t\t"+colums.getColumsName());
						//不是最后一个
						if(i<columsBeans.size()-1){
							sb.append(",");
						}
					}
					sb.append("\n\t\t) values ");
					sb.append("\n\t\t<foreach collection=\"list\" item=\"t\" separator=\",\">");
					sb.append("\n\t\t(");
					for(int i=0;i<columsBeans.size();i++){
						ColumsBean colums=columsBeans.get(i);
						//是不需要新增的字段
						if(config.getDbInsertNot()!=null && config.getDbInsertNot().keySet().contains(StrUtils.toLowerCase(colums.getColumsName()))){
							continue;
						}
						//特殊字段 特殊处理
						if(config.getDbInsertDefault()!=null && config.getDbInsertDefault().get(StrUtils.toLowerCase(colums.getColumsName()))!=null){
							sb.append("\n\t\t"+config.getDbInsertDefault().get(StrUtils.toLowerCase(colums.getColumsName()))+"");
						}else{
							sb.append("\n\t\t#{t."+HeaderUtils.getStr(config.getIsformat(),colums.getColumsName())+"}");
						}
						//不是最后一个
						if(i<columsBeans.size()-1){
							sb.append(",");
						}
					}
					sb.append("\n\t\t)");
					sb.append("\n\t\t</foreach>");
//					sb.append(saveOrUpdateStr);
					sb.append("\n\t</insert>");
					
					//---3--数据更新----
					sb.append("\n\t<!-- 数据更新 -->");
					sb.append("\n\t<update id=\"updateByPrimaryKeySelective\" parameterType=\""+entityClassName+"\" >");
					sb.append("\n\t\tupdate "+table.getTableName()+" set ");
					y=0;
					for(int i=0;i<columsBeans.size();i++){
						ColumsBean colums=columsBeans.get(i);
						//默认更新字段
						if(config.getDbUpdateDefault()!=null){
							if(config.getDbUpdateDefault().keySet().contains(StrUtils.toLowerCase(colums.getColumsName()))){
								if(y==0){
									sb.append("\n\t\t");
								}else{
									sb.append("\n\t\t,");
								}
								if(Validator.notEmpty(config.getDbUpdateDefault().get(StrUtils.toLowerCase(colums.getColumsName())))){
									sb.append(StrUtils.toLowerCase(colums.getColumsName())+"="+config.getDbUpdateDefault().get(StrUtils.toLowerCase(colums.getColumsName()))+"");
								}else{
									sb.append(StrUtils.toLowerCase(colums.getColumsName())+"=#{"+HeaderUtils.getStr(config.getIsformat(),StrUtils.toLowerCase(colums.getColumsName()))+"}");
								}
								y++;
							}
						}
					}
					y=0;
					for(int i=0;i<columsBeans.size();i++){
						ColumsBean colums=columsBeans.get(i);
						//默认更新字段
						if(config.getDbUpdateDefault()!=null){
							if(config.getDbUpdateDefault().keySet().contains(StrUtils.toLowerCase(colums.getColumsName()))){
								continue;
							}
						}
						//是主键
						if("PRI".equals(StrUtils.toUpperCase(colums.getColumsKey()))){
							continue;
						}
						//是上面已出现的字段
						if(config.getDbUpdateDefault()!=null && config.getDbUpdateDefault().keySet().contains(StrUtils.toLowerCase(colums.getColumsName()))){
							continue;
						}
						//是不需要更新的字段
						if(config.getDbUpdateNot()!=null && config.getDbUpdateNot().keySet().contains(StrUtils.toLowerCase(colums.getColumsName()))){
							continue;
						}
						sb.append("\n\t\t<if test=\""+HeaderUtils.getStr(config.getIsformat(),colums.getColumsName())+"!= null\" >,"+colums.getColumsName()+"=#{"+HeaderUtils.getStr(config.getIsformat(),colums.getColumsName())+"}</if>");
					}
					sb.append("\n\t\twhere ");
					for(int i=0;i<pkColumsBeans.size();i++){
						ColumsBean colums=pkColumsBeans.get(i);
						sb.append(" "+colums.getColumsName()+" = #{"+HeaderUtils.getStr(config.getIsformat(),colums.getColumsName())+"}");
						if(i<pkColumsBeans.size()-1){
							sb.append(" and ");
						}
					}
					sb.append("\n\t</update>");
					
					//---4--判断是否存在----
					sb.append("\n\t<!-- 判断是否存在 -->");
					sb.append("\n\t<select id=\"isDataYN\" parameterType=\""+entityClassName+"\" resultType=\"int\">");
					sb.append("\n\t\tselect count(0) from "+table.getTableName()+" where ");
					for(int i=0;i<pkColumsBeans.size();i++){
						ColumsBean colums=pkColumsBeans.get(i);
						sb.append(" "+colums.getColumsName()+" = #{"+HeaderUtils.getStr(config.getIsformat(),colums.getColumsName())+"}");
						if(i<pkColumsBeans.size()-1){
							sb.append(" and ");
						}
					}
					sb.append("\n\t</select>");
					//---5--信息列表 分页----
					sb.append("\n\t<!--信息列表 分页 -->");
					sb.append("\n\t<select id=\"findDataIsPage\" parameterType=\""+entityClassName+"\" resultType=\""+beanClassName+"\">");
					sb.append("\n\t\tselect");
					sb.append("\n\t\t<include refid=\"Base_Column_List\" />");
					sb.append("\n\t\tfrom "+table.getTableName()+" t1 ");
					sb.append("\n\t\twhere 1=1 ");
					
					//逻辑删除标记 字段
					if(del_flag!=null){
						sb.append("\n\t\t<choose>");
						sb.append("\n\t\t\t<when test=\""+HeaderUtils.getStr(config.getIsformat(),config.getDelColumns())+"!=null\">");
						sb.append("\n\t\t\t\tand t1."+config.getDelColumns()+"=#{"+HeaderUtils.getStr(config.getIsformat(),config.getDelColumns())+"}");
						sb.append("\n\t\t\t</when>");
						sb.append("\n\t\t\t<otherwise>");
						sb.append("\n\t\t\t\tand t1."+config.getDelColumns()+"='0'");
						sb.append("\n\t\t\t</otherwise>");
						sb.append("\n\t\t</choose>");
					}else{
						sb.append("\n\t\t<!--未找到逻辑删除标记 字段-->");
					}
					if(date_created_falg==null){
						sb.append("\n\t\t<!-- 未找到创建时间 -->");
						sb.append("\n\t\t<!--");
					}
					sb.append("\n\t\t<if test=\"date1!=null and date1!=''\">");
					sb.append("\n\t\t\t <![CDATA[ and UNIX_TIMESTAMP(t1.date_created)>=UNIX_TIMESTAMP(#{date1})]]>");
					sb.append("\n\t\t</if>");
					sb.append("\n\t\t<if test=\"date2!=null and date2!=''\">");
					sb.append("\n\t\t\t <![CDATA[ and UNIX_TIMESTAMP(t1.date_created)<=UNIX_TIMESTAMP(#{date2})]]>");
					sb.append("\n\t\t</if>");
					if(date_created_falg==null){
						sb.append("\n\t\t-->");
					}
					sb.append("\n\t</select>");
					//---5--信息列表 不分页----
					sb.append("\n\t<!--信息列表 -->");
					sb.append("\n\t<select id=\"findDataIsList\" parameterType=\""+entityClassName+"\" resultType=\""+beanClassName+"\">");
					sb.append("\n\t\tselect");
					sb.append("\n\t\t<include refid=\"Base_Column_List\" />");
					sb.append("\n\t\tfrom "+table.getTableName()+" t1 ");
					sb.append("\n\t\twhere 1=1 ");
					//逻辑删除标记 字段
					if(del_flag!=null){
						sb.append("\n\t\t<choose>");
						sb.append("\n\t\t\t<when test=\""+HeaderUtils.getStr(config.getIsformat(),config.getDelColumns())+"!=null\">");
						sb.append("\n\t\t\t\tand t1."+config.getDelColumns()+"=#{"+HeaderUtils.getStr(config.getIsformat(),config.getDelColumns())+"}");
						sb.append("\n\t\t\t</when>");
						sb.append("\n\t\t\t<otherwise>");
						sb.append("\n\t\t\t\tand t1."+config.getDelColumns()+"='0'");
						sb.append("\n\t\t\t</otherwise>");
						sb.append("\n\t\t</choose>");
					}else{
						sb.append("\n\t\t<!--未找到逻辑删除标记 字段-->");
					}
					if(date_created_falg==null){
						sb.append("\n\t\t<!-- 未找到创建时间 -->");
						sb.append("\n\t\t<!--");
					}
					sb.append("\n\t\t<if test=\"date1!=null and date1!=''\">");
					sb.append("\n\t\t\t <![CDATA[ and UNIX_TIMESTAMP(t1.date_created)>=UNIX_TIMESTAMP(#{date1})]]>");
					sb.append("\n\t\t</if>");
					sb.append("\n\t\t<if test=\"date2!=null and date2!=''\">");
					sb.append("\n\t\t\t <![CDATA[ and UNIX_TIMESTAMP(t1.date_created)<=UNIX_TIMESTAMP(#{date2})]]>");
					sb.append("\n\t\t</if>");
					if(date_created_falg==null){
						sb.append("\n\t\t-->");
					}
					sb.append("\n\t</select>");
					//---6--逻辑删除----
					sb.append("\n\t<!-- 逻辑删除 -->");
					sb.append("\n\t<update id=\"deleteById\" parameterType=\""+entityClassName+"\" >");
					sb.append("\n\t\tupdate "+table.getTableName()+" set ");
					y=0;
					for(int i=0;i<columsBeans.size();i++){
						ColumsBean colums=columsBeans.get(i);
						//默认更新字段
						if(config.getDbUpdateDefault()!=null){
							if(config.getDbUpdateDefault().keySet().contains(StrUtils.toLowerCase(colums.getColumsName()))){
								if(y==0){
									sb.append("\n\t\t");
								}else{
									sb.append("\n\t\t,");
								}
								if(Validator.notEmpty(config.getDbUpdateDefault().get(StrUtils.toLowerCase(colums.getColumsName())))){
									sb.append(StrUtils.toLowerCase(colums.getColumsName())+"="+config.getDbUpdateDefault().get(StrUtils.toLowerCase(colums.getColumsName()))+"");
								}else{
									sb.append(StrUtils.toLowerCase(colums.getColumsName())+"=#{"+HeaderUtils.getStr(config.getIsformat(),StrUtils.toLowerCase(colums.getColumsName()))+"}");
								}
								y++;
							}
						}
					}
					//逻辑删除标记 字段
					if(del_flag!=null){
						sb.append("\n\t\t,"+config.getDelColumns()+"='1'");
					}else{
						sb.append("\n\t\t<!--未找到逻辑删除标记 字段-->");
					}
					
					sb.append("\n\t\twhere ");
					for(int i=0;i<pkColumsBeans.size();i++){
						ColumsBean colums=pkColumsBeans.get(i);
						sb.append(" "+colums.getColumsName()+" = #{"+HeaderUtils.getStr(config.getIsformat(),colums.getColumsName())+"}");
						if(i<pkColumsBeans.size()-1){
							sb.append(" and ");
						}
					}
					sb.append("\n\t</update>");
					//---7--恢复逻辑删除----
					sb.append("\n\t<!-- 恢复逻辑删除 -->");
					sb.append("\n\t<update id=\"recoveryDataById\" parameterType=\""+entityClassName+"\" >");
					sb.append("\n\t\tupdate "+table.getTableName()+" set ");
					y=0;
					for(int i=0;i<columsBeans.size();i++){
						ColumsBean colums=columsBeans.get(i);
						//默认更新字段
						if(config.getDbUpdateDefault()!=null){
							if(config.getDbUpdateDefault().keySet().contains(StrUtils.toLowerCase(colums.getColumsName()))){
								if(y==0){
									sb.append("\n\t\t");
								}else{
									sb.append("\n\t\t,");
								}
								if(Validator.notEmpty(config.getDbUpdateDefault().get(StrUtils.toLowerCase(colums.getColumsName())))){
									sb.append(StrUtils.toLowerCase(colums.getColumsName())+"="+config.getDbUpdateDefault().get(StrUtils.toLowerCase(colums.getColumsName()))+"");
								}else{
									sb.append(StrUtils.toLowerCase(colums.getColumsName())+"=#{"+HeaderUtils.getStr(config.getIsformat(),StrUtils.toLowerCase(colums.getColumsName()))+"}");
								}
								y++;
							}
						}
					}
					//逻辑删除标记 字段
					if(del_flag!=null){
						sb.append("\n\t\t,"+config.getDelColumns()+"='0'");
					}else{
						sb.append("\n\t\t<!--未找到逻辑删除标记 字段-->");
					}
					sb.append("\n\t\twhere ");
					for(int i=0;i<pkColumsBeans.size();i++){
						ColumsBean colums=pkColumsBeans.get(i);
						sb.append(" "+colums.getColumsName()+" = #{"+HeaderUtils.getStr(config.getIsformat(),colums.getColumsName())+"}");
						if(i<pkColumsBeans.size()-1){
							sb.append(" and ");
						}
					}
					sb.append("\n\t</update>");
					sb.append("\n</mapper>");
					//文件保存路径 项目根目录+包路径+类名称
					String fileurl=config.getResourcesDirUrl()+config.getXmlPackage().replace(".", "/");
					//创建文件夹
			    	File saveDirFile = new File(fileurl);
			    	if (!saveDirFile.exists()) {
			    		saveDirFile.mkdirs();
			    	}
					//写入文件
					IOHelper.saveFile(fileurl+"/"+StrUtils.toLowerCaseFirstOne(className)+".xml",sb.toString());
					//TODO 生成配置文件信息
					csb.append("\n\t\t<!-- "+table.getTableNote()+" -->");
					csb.append("\n\t\t<mapper resource=\""+config.getXmlPackage().replace(".", "/")+"/"+StrUtils.toLowerCaseFirstOne(className)+".xml\"/>");
					
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return csb;
	}
	
}
